import QtQuick
import QtQuick.Controls
import "qmlPart"

Window {
  id: mainWindow
  width: 640
  height: 480
  visible: true
  title: qsTr("Map test")

  signal backSelectComMes(string com_name, int index, bool is_connect, int baudRate)
  signal closeSelectCom
  
  TopWindow {
    id: topWindow
    width: mainWindow.width
    height: mainWindow.height / 12
    color: "black"
    // 连接TopWindow的信号到Main窗口的信号
    // 信号处理函数：将TopWindow组件的信号转发到主窗口
    onBackSelectComMes: function(com_name, index, is_connect, baudRate) {
      // 调用主窗口的同名信号，保持参数不变
      mainWindow.backSelectComMes(com_name, index, is_connect, baudRate);
    }
    onCloseSelectCom: {
      mainWindow.closeSelectCom();
    }
  }

  // 发送消息按钮的定义
  signal sendMessage(string str)
  Button {
    x: 20
    y: 80
    width: 100
    height: 40
    text: qsTr("发送消息")
    onClicked: {
      sendMessage("hello world!");
    }
  }

  signal sendHeartbeat
  Button {
    x: 20
    y: 140
    width: 100
    height: 40
    text: qsTr("发送心跳")
    onClicked: {
      sendHeartbeat();
    }
  }

  // 消息接收区
  Text {
    id: messageText
    x: 20
    y: 200
    text: "消息显示区域"
  }
  Timer {
    id: message_timer
    interval: 1000 // 1000ms
    repeat: true
    // 使用property声明的属性会成为组件的一部分,而var声明的变量只在当前作用域内有效
    // 当Timer重复触发时,var声明的变量会在每次触发时重置为初始值
    property int counter: 0
    onTriggered: {
      // 每次触发时计数器加1
      counter++;
      var messageList = getComMessage.putMavlinkMessage();
      // 在消息文本中加入计数器信息
      messageText.text = "第" + counter + "次调用: " + messageList.join(", ");
    }
  }
  Button {
    id: messageButton
    x: 20
    y: 260
    width: 100
    height: 40
    text: qsTr("获取消息")
    onClicked: {
      if (messageButton.text === qsTr("获取消息")) {
        messageButton.text = qsTr("停止获取");
        message_timer.start();
      } else {
        messageButton.text = qsTr("获取消息");
        message_timer.stop();
      }
    }
  }

  // 添加地图组件
  MyMap {
    id: mapComponent
    anchors.top: topWindow.bottom
    x: mainWindow.width * 0.3
    width: mainWindow.width -  mapComponent.x
    height: mainWindow.height - topWindow.height
    
    // 改进初始化时机
    Component.onCompleted: {
      // 延迟执行初始化，确保组件完全加载
      initTimer.start();
    }
  }
  
  // 添加初始化定时器
  Timer {
    id: initTimer
    interval: 1000
    repeat: false
    onTriggered: {
      // 测试地图功能
      mapComponent.updateDroneFormation(1, 30.2905, 104.38, 100);
    }
  }
  
  // GPS位置更新的连接
  Connections {
    target: getUavLocation
    function onPositionUpdated(lat, lng, altitude, heading, droneId) {
      console.log("收到GPS位置更新:", "无人机ID:", droneId, "纬度:", lat, "经度:", lng, "高度:", altitude, "航向:", heading);
      // 更新地图上的无人机位置
      mapComponent.updateDroneFormation(droneId, lat, lng, altitude);
    }
  }
  // GPS定时器中的调用
  Timer {
    id: gpsTimer
    interval: 1000
    repeat: true
    running: false
    onTriggered: {
      // GPS定时器触发 - 等待MAVLink数据
      console.log("GPS定时器触发 - 等待MAVLink数据");
    }
  }
  // 测试地图功能
  Button {
    x: 20
    y: 340
    width: 100
    height: 40
    text: qsTr("测试地图")
    onClicked: {
      // 测试添加无人机位置
      mapComponent.updateDroneFormation(1, 30.2905 + Math.random() * 0.01, 104.38 + Math.random() * 0.01, 100);
    }
  }
  // GPS位置监控定时器
  Timer {
    id: gpsMonitorTimer
    interval: 1000 // 每秒更新一次
    repeat: true
    running: false // 默认不运行，可以通过按钮控制
    onTriggered: {
      // 检查getUavLocation是否可用
      if (typeof getUavLocation !== "undefined" && getUavLocation) {
        var locationData = getUavLocation.getUavLocation();
        if (locationData.length >= 3) {
          var lat = locationData[0];
          var lng = locationData[1];
          var altitude = locationData[2];
          console.log("定时器GPS位置:", "纬度:", lat, "经度:", lng, "高度:", altitude);
          // 使用固定的无人机ID 1
          mapComponent.updateDroneFormation(1, lat, lng, altitude);
        }
      } else {
        console.log("getUavLocation对象不可用");
      }
    }
  }
  // 添加GPS监控控制按钮
  Button {
    x: 20
    y: 380
    width: 100
    height: 40
    text: gpsTimer.running ? qsTr("停止GPS") : qsTr("开始GPS")
    onClicked: {
      gpsTimer.running = !gpsTimer.running;
    }
  }
  
  // 添加窗口关闭时的清理
  onClosing: {
    // 清理地图组件
    if (mapComponent) {
      mapComponent.destroy();
    }
  }
}
